home *** CD-ROM | disk | FTP | other *** search
- IDEAL
- %TITLE "C0: Startup Code for a BGI Driver"
- MODEL TINY
- CODESEG
-
- GLOBAL C dispatch:WORD
- GLOBAL C fardispatch:WORD
- GLOBAL C emulate:NEAR
- GLOBAL C bitmaputl:NEAR
-
- ORG 0
- PROC main FAR
- push ds
- push cs
- pop ds
- cld
- push bp
- push es
- push bx ; at bp+6
- push dx ; at bp+4
- push cx ; at bp+2
- push ax ; at bp
- mov bp, sp
- jmp main_2
- ENDP main
-
- ORG 10h
- PROC emulate C
- ret
- dd ?
- ENDP emulate
-
- PROC main_2 FAR
- lea ax, [bp+6]
- push ax
- sub ax, 2
- push ax
- sub ax, 2
- push ax
- add ax, 4
- push ax
- sub ax, 6
- push ax
- ; INT 3 ; debug
- call [dispatch+si]
- add sp, 10
- sub ax, 1 ; if RV=0, no carry
- cmc ; else carry set
- pop ax
- pop cx
- pop dx
- pop bx
- pop es
- pop bp
- pop ds
- ret
- ENDP main_2
-
- PROC C bitmaputl, _ax:WORD, _bx:WORD, _cx:WORD, _dx:WORD, @@procs:WORD
- mov bx, [@@procs]
- push cs
- pop [WORD HIGH (DWORD ss:bx)]
- mov [WORD LOW (DWORD ss:bx)], OFFSET @@dispatch
- ret
- LABEL @@dispatch WORD
- dw $$exit
- dw $$exit
- dw $$putpixel
- dw $$getpixel
- dw $$getpixelwidth
- dw $$exit
- dw $$exit
- dw $$setwritemode
-
- PROC $$exit FAR
- ret
- ENDP $$exit
-
- PROC $$putpixel FAR
- push ds
- push cs
- pop ds
- call [fardispatch+0] C, ax, bx, dx
- pop ds
- ret
- ENDP $$putpixel
-
- PROC $$getpixel FAR
- push ds
- push cs
- pop ds
- call [fardispatch+2] C, ax, bx
- mov dx, ax
- pop ds
- ret
- ENDP $$getpixel
-
- PROC $$getpixelwidth FAR
- push ds
- push cs
- pop ds
- call [fardispatch+4] C
- pop ds
- ret
- ENDP $$getpixelwidth
-
- PROC $$setwritemode FAR
- push ds
- push cs
- pop ds
- call [fardispatch+6] C, ax
- pop ds
- ret
- ENDP $$setwritemode
- ENDP bitmaputl
- END
-